home *** CD-ROM | disk | FTP | other *** search
/ The Arsenal Files 8 / The Arsenal Files Collection #8 (Arsenal Computer) (1996).ISO / pcboard / ulp_224.zip / ULP.DOC < prev    next >
Text File  |  1996-10-05  |  82KB  |  1,631 lines

  1.  
  2.     ┌───────────────────┐
  3.     │                   │ ║                UpLoadProcessor
  4.     │    ╥   ╥ ╥        │ ║
  5.     │    ║   ║ ║ ╓──╖   │ ║                 Version 2.24
  6.     │    ║   ║ ║ ║  ║   │ ║
  7.     │    ╙───╜ ╨ ║──╜   │ ║     (c) Copyright 1992-1996 - Stacy Smith
  8.     │            ╨      │ ║
  9.     └───────────────────┘ ║
  10.       ════════════════════╝
  11.  
  12.    ┌───────────────────────────────────────────────────────────────────────┐
  13.    │      Winner of the 1995 PCBoard Favorite Add-On Contest, Overall      │
  14.    │  Winner of the 1994 PCBoard Favorite Add-On Contest, Other Utilities  │
  15.    └───────────────────────────────────────────────────────────────────────┘
  16.  
  17.                                   Courtesy of:
  18.  
  19.                          The Bloom Beacon-Picayune BBS
  20.                         Node 1: *** DOWN TEMPORARILY ***
  21.                                     FidoNet
  22.                                      ILink
  23.                                     Intelec
  24.  
  25.                                   Stacy Smith
  26.                               305 Cottonwood Lane
  27.                             Holly Springs, NC 27540
  28.  
  29.  
  30. ┌───────────────────┐
  31. │  1. Introduction  │
  32. └───────────────────┘
  33.  
  34. This system was born out of a need for a universal upload processor.  There are
  35. many alternative systems available, but they are limited to the ZIP format and
  36. perhaps one or two others.  Few are able to handle self-extracting archives.
  37. Most are limited in the number of levels of archive nesting allowed in a file
  38. to be tested.  Very few properly handle archives with imbedded paths.  Many
  39. require the use of a third-party duplicate file checking system if you want to
  40. screen your uploads for duplicates.
  41.  
  42. Tired of waiting for PKZIP 2.something-or-another, I converted my BBS files
  43. over to the ARJ compression format, due to its superior compression ratio over
  44. PKZip and its features over LHA (I have since switched back to ZIP...the
  45. undertow was overwhelming <g>).  But due to that decision, the need for a
  46. universal upload processor became apparent, so off I went.
  47.  
  48. While I was at it, I decided to incorporate other technologies, such as
  49. duplicate checking, archive format conversion, customized displays and
  50. comments, internationalization, foreign language support, information lines,
  51. internal description files, etc., into a single package.  This software is the
  52. result of my efforts to allow my BBS to handle any archive that my users can
  53. throw at it.
  54.  
  55.  
  56. ┌─────────────────────────────────────────────┐
  57. │  2. Features of the UpLoadProcessor System  │
  58. └─────────────────────────────────────────────┘
  59.  
  60.   ∙ Native versions available for both 16-bit DOS and 32-bit OS/2!  DOS version
  61.     is fully OS/2, DESQview and Windows aware, including time-slice releasing.
  62.   ∙ Identifies and processes ARC, ARJ, HYP, LZH, PAK, RAR, SQZ, ZIP, ZOO, GIF,
  63.     JPEG and BMP files, regardless of their file extensions (ideal for software
  64.     distribution network files such as SDN).
  65.   ∙ Identifies and processes ARJ, LZH, RAR, SQZ and ZIP self-extracting (SFX)
  66.     archives.
  67.   ∙ Detects, processes and converts any archive with imbedded paths, retaining
  68.     all path information.
  69.   ∙ Scans ARC, PAK, ZIP and ZIP SFX archives for DOS reserved keywords to
  70.     prevent hacking by hex-editing. (ARJ and LHA are resistant to these type of
  71.     hacking attempts).
  72.   ∙ Detects ARJ security envelopes and ZIP version 1.x and 2.x authenticity
  73.     verification (-AV) stamps and may be retained intact.
  74.   ∙ Detects and rejects encrypted ARJ and ZIP archives.
  75.   ∙ Uses a recursive processing routine that will allow (theoretically)
  76.     unlimited nested archives and paths (the only limit is imposed by the OS
  77.     path).  This routine has been tested to 7 levels deep as of this writing.
  78.   ∙ Selected uncompressed files uploaded can be processed and compressed using
  79.     your default format.
  80.   ∙ Uploads can be filtered, privileged and TCANned on a wide variety of
  81.     criteria, including filename, file size, description keywords, etc..
  82.   ∙ Removes known BBS ads from archives; includes BBS ads database maintenance
  83.     functionality so that sysops can update their BBS ads databases in real
  84.     time.  ULP can also insert a BBS ad (ugh), if desired.
  85.   ∙ Sends messages to the online user and/or sysop for failed and/or passed
  86.     uploads, fully customizable and with multi-lingual support.
  87.   ∙ Updates the PCBoard DOWNLOAD.TXT file, if desired, with the correct archive
  88.     extension to reflect the conversion process.
  89.   ∙ Allows the use of up to 10 different archiving programs, all user-
  90.     configurable.  Any archiving program used that is not listed above will be
  91.     identified using its unique file extension only, until its signature is
  92.     determined and incorporated into ULP (after a new archive has demonstrated
  93.     widespread use).
  94.   ∙ Archive comments can be customized on an archive-by-archive basis through
  95.     the use of a template and @-variables.
  96.   ∙ Allows the use of up to 10 different file-checking programs, all user-
  97.     configurable, for virus and trojan checking, third-party utilities, etc.
  98.   ∙ Rejects GIF and JPEG files based upon image width, height, colors and/or
  99.     compression.  Different values can be selected for GIF and JPEG.
  100.   ∙ Allows the use of GIF and JPEG file checking programs, completely and
  101.     individually configurable.
  102.   ∙ User-definable disposition (keep, rename or delete) of corrupted, duplicate
  103.     or other archives (not virus-related).
  104.   ∙ User-definable disposition of virus-infected archives.
  105.   ∙ User-definable disposition of complete duplicate archives.
  106.   ∙ Incorporates it's own duplicate checking system, as well as the associated
  107.     database processing software.  This internal system is extremely fast and
  108.     it's database is much smaller than other systems.  Despite it's size, the
  109.     possibility of a false duplication is almost 1 in 10 trillion!  The system
  110.     is self-validating, to quickly determine if a database has been corrupted
  111.     or altered.
  112.   ∙ Optional seamless interface with the ZDCS duplication system.
  113.   ∙ ULP determines duplication using two filters, total duplication and
  114.     executable duplication, preventing false rejection by simply counting up
  115.     the number of blatantly duplicate files as other duplication systems do.
  116.   ∙ Converts all uploads into a default archive format of your choosing, or
  117.     they may be re-archived in their original format (user-defined).  Nested
  118.     and pathed archives can also be converted to your default format, or
  119.     re-archived using their original format.  SFX archives can be archived
  120.     using your default format, or optionally left alone after verification.
  121.     Archiving formats can be individually configured to not be converted to
  122.     your default, effectively allowing multiple defaults.
  123.   ∙ Can utilize a user-defined time window (in months) for acceptance of new
  124.     upload files, based on the actual or statistical average age of the files
  125.     within the archive, or optionally, the age of the newest file.
  126.   ∙ Supports the use of private and public upload directories.  Moves files and
  127.     upload descriptions from the private directory to the public directory.
  128.     Rejected uploads can be optionally moved to an offline area of your
  129.     choosing.  Single directory area operation may also be configured.
  130.   ∙ Duplication and age limits can be set on an area-by-area basis.
  131.   ∙ Honors the '/' identifier in the description marking the file as a private
  132.     upload for the sysop by processing the file, but not making it public.
  133.   ∙ Supports the use of DESC.SDI, FILE-ID.DIZ and VENDINFO.DIZ description
  134.     files in an archive, user-configurable.  The number of lines inserted is
  135.     also configurable, up to 40 lines maximum.
  136.   ∙ Smart word-wrapping word-wraps descriptions or leaves them as entered,
  137.     depending upon the presence of boxes, etc.
  138.   ∙ Can optionally insert an archive or GIF/JPEG information line in the file
  139.     description that contains various information about the upload.
  140.   ∙ Three modes of online testing are available: slow mode, which completely
  141.     processes files at the time of upload; normal mode, which fully unpacks the
  142.     archive and tests each file individually; and fast mode, which scans a ZIP
  143.     or ARJ archive directly for file CRCs, sizes and dates, and uses the
  144.     archiving program's internal integrity testing.
  145.   ∙ The online tester will accept a redirected ARJ or PKUNZIP archive listing
  146.     file to pre-verify the duplication and age limits before a user uploads the
  147.     actual archive, saving him or her wailing and gnashing of teeth.
  148.   ∙ ULP can generate COM port status output to inform the online user of the
  149.     progress of testing.  The format of the screen display is completely
  150.     sysop-designed through the use of template files; different template files
  151.     can be used for high-speed and low-speed callers.  Multi-lingual templates
  152.     files are supported.  ULP supports IRQs 2 through 15, non-standard port
  153.     addresses and baud rates to 115K in direct mode, supports FOSSIL drivers
  154.     and the OS/2 SIO API interface.  The port information can be defined on the
  155.     command-line or can be read directly from PCBOARD.SYS or DOOR.SYS.
  156.   ∙ Import of FWKCS(TM) contents_signature databases is supported to ease
  157.     transition to the ULP duplication system.  No need to rebuild databases for
  158.     FWKCS users!
  159.   ∙ Archives failed for exceeding duplication limits can be viewed using ULPSM,
  160.     to allow easy determination of manual archive acceptance.
  161.   ∙ User-selectable process logging to a disk file.  Two logging modes are
  162.     available: terse and verbose.  A debug operational mode can also be
  163.     utilized to help track down configuration errors.
  164.   ∙ Menu-driven windowed system manager for maximum ease of configuration,
  165.     including context-sensitive help.  Automatic installation speeds the
  166.     configuration and setup process for new users.
  167.   ∙ Written mostly in C (and a little assembler) for optimal speed, using
  168.     Microsoft C/C++ v7 and Watcom C/C++ v10.
  169.  
  170.  
  171. ┌─────────────────────────────────────────────────────┐
  172. │  3. Files Included in the ULP Distribution Archive  │
  173. └─────────────────────────────────────────────────────┘
  174.  
  175.     ULP.EXE         Upload processing program.
  176.     ULPSM.EXE       System and configuration manager for the ULP system.
  177.     ULPSM.HLP       Help data file for the ULP system.
  178.     BBSADS.DB       BBS ads database file.
  179.     ULP.DOC         This file.
  180.     FAQ.DOC         Frequently asked questions list.
  181.     SUPPORT.DOC     List of authorized support sites for my shareware.
  182.     HISTORY.DOC     ULP revision history in reverse order.
  183.     UPGRADE.DOC     Information specific to upgrading from previous versions.
  184.     REGISTER.FRM    Registration form for ULP and other software.
  185.     FILE_ID.DIZ     Internal description file.
  186.  
  187. When you unzip the distribution archive, you should see my PKZIP authenticity
  188. verification stamp, and a '-AV' after every file in the archive:
  189.  
  190.     # SSU301    The Bloom Beacon-Picayune BBS
  191.  
  192. If there are any files missing or added, or the -AV stamp is missing, the
  193. archive may have been tampered with.  It would be advisable to call my BBS
  194. (listed at the top of this document) or one of the support sites listed in
  195. SUPPORT.DOC for the latest version of ULP.
  196.  
  197. The 32-bit OS/2 executables ULP2.EXE and ULPSM2.EXE are distributed in a
  198. separate archive named ULP2_xxx.ZIP, where the "xxx" is the revision level of
  199. ULP.  Since this archive contains only the OS/2 executables, the general
  200. distribution archive must be downloaded as well.  This was done to reduce the
  201. size of the general distribution archive for those sysops not running OS/2 as
  202. their operating system.
  203.  
  204.  
  205. ┌───────────────────────────┐
  206. │  4. Program Requirements  │
  207. └───────────────────────────┘
  208.  
  209. To the best of my knowledge, the ULP programs will run on most any machine
  210. capable of running PCBoard 14.5+.  My BBS setup was OS/2 and DOS/DESQview on a
  211. LANtastic network with hard disks and CD-ROMs, but other sysops that I have
  212. been in contact with have successfully implemented ULP on setups with other
  213. varying hardware and software.
  214.  
  215. ULP has been developed and tested using the following third party utilities:
  216.  
  217.     ARJ 2.10 and higher (by Robert Jung)
  218.     HYPER 2.5 (by P. Sawatzki and K. P. Nischke)
  219.     LHA 2.12 and higher (by Haruyasu Yoshizaki)
  220.     LHarc 1.13c (by Haruyasu Yoshizaki)
  221.     PAK 2.51 (by NoGate Consulting)
  222.     PKPAK 3.61 (by PKWare)
  223.     PKZIP 1.10 and higher (by PKWare)
  224.     RAR 1.53 and higher [both DOS and OS/2 versions] (by Eugene Roshal)
  225.     SQZ 1.08.2 (by Jonas Hammarberg)
  226.     ZOO 2.01 and higher (by Rahul Deshi)
  227.     AntiAd 0.98ß and higher (by Stacy Smith)
  228.     F-PROT 2.07 and higher (by Frisk Software International)
  229.     SCAN V82 and higher (by McAfee Associates)
  230.     GFXCheck 1.00 and higher (by Stacy Smith)
  231.     GIFTEST 4.0 Beta 10 and higher (by Max Bernard/Dave Navarro)
  232.     ZDCS 2.03 and higher (by Stacy Smith)
  233.     TXT2MSG 2.42 and higher (by Robert Vostreys)
  234.     SHROOM 2.3a (by Davis Augustine)
  235.     UnZip 5.12 (by Info-ZIP)
  236.     ZIP 2.0.1 (by Adler, Wales, Gailly and Rommel)
  237.     OS/2Scan 2.2.0 (by McAfee Associates)
  238.     PipeDOS (by Scott Maxwell)
  239.  
  240. The ULP system requires DOS 3.x or later (or compatible, such as an OS/2 DOS
  241. VDM), as it uses DOS SHARE-compatible file reads and writes, and can use the
  242. DOS PATH to find the archiving and other utilities.  The 32-bit OS/2 version of
  243. ULP must be run under OS/2 2.0 or later.
  244.  
  245. ULP's memory requirements are relatively small (about 250K for ULP.EXE, 450K
  246. for ULPSM.EXE), and can easily live in the same amount of memory as PCBoard
  247. (450K as recommended by Clark Development).  Note that all programs are spawned
  248. or shelled, which reduces the free memory for the program being executed.  It
  249. would be a good idea to have as much free conventional memory as possible (ULP
  250. itself cannot use EMS or XMS memory except for swapping), especially if you use
  251. the ARJ compression system, which requires more than 300K itself to run.  None
  252. of these limits exist for the 32-bit OS/2 versions of ULP, since we are using a
  253. real operating system. <g>
  254.  
  255.  
  256. ┌───────────────────┐
  257. │  5. Registration  │
  258. └───────────────────┘
  259.  
  260. The ULP system is not free; nor is ULP is crippled to force registration.  ULP
  261. is fully functional, and will always remain so.  The primary difference is no
  262. time delay and beg message once registered.  The time delays will begin 45 days
  263. after the initial installation of ULP.
  264.  
  265. Why register?  Besides a clean conscience, you will get a registration key that
  266. will work for all future versions of ULP, and will remove the delay and message
  267. at the end of execution of each program.
  268.  
  269. The registration fee for ULP is $25 for hobbyist BBSes.  The registration fee
  270. for commercial BBSes, defined as running your BBS in the course of a commercial
  271. business (e.g. more than 10 nodes), is $40.  Please print the file REGISTER.FRM
  272. and fill it out.  You can print out the form by issuing the following command
  273. from the DOS prompt:
  274.  
  275.     TYPE REGISTER.FRM > PRN
  276.  
  277.  
  278. ┌───────────────────────────────────────┐
  279. │  6. License, Warranty and Disclaimer  │
  280. └───────────────────────────────────────┘
  281.  
  282. I'll keep this part short and sweet, and dispense (mostly) with the legal-ese:
  283.  
  284.     License:  You are allowed to use ULP for 30 days, after which you must
  285.         either register ULP or stop using it completely.  Decompiling,
  286.         disassembly or any other form of reverse engineering the ULP programs
  287.         for any purpose is prohibited.  ULP registration is a license for your
  288.         use of ULP; I retain ownership of the software.  A single registration
  289.         applies to a single BBS system, regardless of the number of computers
  290.         used in the system.  If you run two or more distinct BBS systems on the
  291.         same computer or network (with different names), you require two or
  292.         more ULP registrations.  ULP registrations are not transferrable; you
  293.         cannot sell your registration to another sysop.  Refer to the
  294.         registration form for the currect pricing structure.
  295.  
  296.     Warranty:  There isn't one.  The only thing I'll guarantee is that ULP will
  297.         take up disk space, and will disappear when deleted.
  298.  
  299.     Disclaimer:  I'm not responsible for anything bad that happens.  ULP works
  300.         here, but I cannot be held responsible for it not working on your
  301.         computer or doing any damage to hardware or software.
  302.  
  303. If these aren't agreeable with you, then the best thing to do is delete ULP
  304. right now.  I'll do my best to help any user (registered or not) that wants to
  305. use ULP, and I'll act on bug reports as quickly as possible, but I simply
  306. cannot and will not be responsible for anything bad, like lost data, disk
  307. crashes, or whatever else you can think of.
  308.  
  309.  
  310. ┌────────────────────────────┐
  311. │  7. Conceptual Background  │
  312. └────────────────────────────┘
  313.  
  314. *******************************************************************************
  315.         READ THIS SECTION CAREFULLY, AS IT WILL MAKE LIFE MUCH EASIER!!!
  316. *******************************************************************************
  317.  
  318. Since the ULP system is much more comprehensive than other upload processing
  319. software, and therefore more complex, this overview and concept explanation
  320. should help you understand how ULP is designed and how it can be best used for
  321. your BBS.  Some of this information may be specific to PCBoard sysops, but the
  322. general concepts remain the same.
  323.  
  324. Note that ULP is an inter-operating set of tools, not distinct independent
  325. functions.  In this fashion, ULP is better able to track what is happening
  326. between online testing and the event without sysop intervention.
  327.  
  328. BATCH PROCESSING:
  329. ─────────────────
  330. As a minimum setup, you MUST run ULP as an event-mode batch processor, since
  331. ULP handles most of the database updating, archive conversion, file and
  332. description moving, archive information line computation, and other features
  333. during the batch run.  THIS IS NOT AN OPTION!!!  Even if you run everything
  334. online in slow mode, some quick maintenance needs to be performed by ULP in the
  335. event on ULP system files that are not safely manipulated online.
  336.  
  337. When running ULP in a batch mode (batch, override), such as processing new
  338. files that come in on tape, CD-ROM, file distribution network, etc., ULP's
  339. operation can summed up as follows:
  340.  
  341.     ULP looks in the source area and processes all new files it finds (files it
  342.     hasn't seen before).  ULP moves the good files to the destination area, if
  343.     one is defined.  ULP moves the defective files to the failure area, if
  344.     defined.
  345.  
  346. Pretty simple concept, huh? <g>  ULP's batch modes do what you tell it to in
  347. the upload directory areas configuration; it doesn't know or care about private
  348. areas, public areas or otherwise.  Through the use of a self-maintaining data
  349. file, ULP knows what it has and hasn't already processed in every source
  350. subdirectory configured.  This allows enormous flexibility for a variety of
  351. tasks.  Some possibilities:
  352.  
  353.   - Local uploads:  Configure an input directory as your ULP source area, and
  354.         your BBS new uploads directory as the output.  As you get new files,
  355.         such as downloads from your own BBSing activities, place any files you
  356.         want to locally upload into the input directory and the batch
  357.         processing will process all new files and move the good files into your
  358.         BBS new uploads directory.  Optionally, a failure directory can be
  359.         configured to have the bad files moved into for better organization.
  360.  
  361.   - Robocomm R&P:  This would be setup similarly to the local uploads, where
  362.         you pass the Robocomm download directory and download DIR listing that
  363.         it creates during R&P runs to ULP as the source area, and configure
  364.         your new uploads area as your ULP destination area.
  365.  
  366.   - File distribution nets (.TIC files):  ULP doesn't toss .TIC files (no sense
  367.         re-inventing the wheel), but ULP's batch processing works very well
  368.         with most any .TIC tosser.  There are two ways this can be implemented.
  369.         First, the .TIC tosser can toss all the files into a holding directory,
  370.         and then ULP can move the good ones to the new uploads subdirectory.
  371.         If this way is used, you simply need to configure the holding directory
  372.         as the ULP source area, and the new uploads directory as the
  373.         destination.
  374.  
  375.         The other way is to have the .TIC tosser toss the files to their final
  376.         destination in your file directories.  The requires that you configure
  377.         every subdirectory that the .TIC tosser may toss files into as the
  378.         source directory, leaving the destination area blank.  This allows ULP
  379.         to scan all files in all directories, selecting only the new ones, and
  380.         process them.  In this implementation, it would be a good idea to
  381.         configure a failure area so that defective files are moved out of the
  382.         available file area to prevent user access to them.
  383.  
  384. ULP's batch processing modes are designed to be able to be run without shutting
  385. down your BBS nodes, however it would be a good idea to disable uploads during
  386. batch processing.  The reason for this is that if an upload occurs in a
  387. directory currently under event processing, the directory listings may become a
  388. source of contention if they both try to update it simultaneously.  This is
  389. very small risk, but it was documented anyway just in case.
  390.  
  391. ONLINE TESTING:
  392. ───────────────
  393. I believe that all responsible BBS sysops verify all of their uploads prior to
  394. posting them, in order to protect both themselves and their users.  ULP is
  395. designed with idea in mind.  Most, if not all, sysops process uploads in one of
  396. two ways (listed with benefits and liabilities as I see them), regardless of
  397. what upload processing software they use:
  398.  
  399.     1) Make all uploads private, processing them during a system event for
  400.        public distribution.
  401.  
  402.        BENEFITS:
  403.            ∙ Takes up very little on-line time on the user's part to process
  404.              archives if the re-compression process is skipped while online.
  405.            ∙ Allows the conversion of all archives to a default format, so that
  406.              the BBS archives are consistent.
  407.            ∙ Allows the BBS to accept any archive format...face it, it's hard
  408.              enough to get some of these weenies to upload, much less compress
  409.              them the same way.
  410.  
  411.        LIABILITIES:
  412.            ∙ Files are not available immediately for download.
  413.            ∙ Does not catch duplicates or aged archives until after the user
  414.              has uploaded them, and perhaps leads to abuse by clever (?) users.
  415.              (It is assumed that these sysops still use the venerable 'PKUNZIP
  416.              -T' in their PCBTEST.BAT...)
  417.  
  418.     2) Process (test) each upload online after the user uploads them, and
  419.        making them available for immediate download.
  420.  
  421.        BENEFITS:
  422.            ∙ Catches duplicate, defective and aged archives while the user is
  423.              online, denying him upload credits.
  424.            ∙ Files are available immediately for download if they are not made
  425.              private in the PCBoard setup.
  426.  
  427.        LIABILITIES:
  428.            ∙ Takes up on-line time for a user, potentially adding to his
  429.              long-distance phone bill, discouraging further uploading; this
  430.              process is typically quite slow for large archives.
  431.  
  432. ULP also implements an online processing system, with varying modes of
  433. operation from complete processing to a very fast scan of the archive directly
  434. for needed data.  These modes will allow you to run your BBS in the most
  435. efficient manner possible for both you and your users.
  436.  
  437. Pay attention to this part!!!:
  438.  
  439. PCBoard (as do many BBS platforms) normally has two upload directories for each
  440. conference: a private and a public directory.  When PCBoard invokes
  441. PCBTEST.BAT, the upload is currently in the private directory.  If the archive
  442. fails the testing, it will remain in the source directory.  However, if it
  443. passes, one of two things will occur depending upon your system setup:
  444.  
  445.   - If you have made all uploads private in PCBSETUP, the file will remain in
  446.     the private directory.
  447.   - If you have not made uploads private, it will be moved BY PCBOARD (not ULP)
  448.     to the public directory.
  449.  
  450. This is an important point:  during online testing, ULP does not move the file
  451. in any way; the BBS software is expected to disposition the upload file itself.
  452. ULP feeds back the testing results to the BBS software in two ways, via
  453. semaphore files and via an errorlevel.  The errorlevels returned by ULP are
  454. listed in the appendix of this file.
  455.  
  456. In PCBoard, if you have made all uploads private (via PCBSETUP), the setup and
  457. configuration of ULP is a snap: the source directory is the private upload
  458. directory, and the destination is the public directory.  However, if you want
  459. to allow users access to untested uploads, then your source directory is the
  460. public upload directory, and the destination information is left blank.  To
  461. illustrate the operation:
  462.  
  463.   MAKE ALL UPLOADS PRIVATE           │  ALL UPLOADS AVAILABLE AFTER TESTING
  464.   ───────────────────────────────────┼─────────────────────────────────────
  465.   2 directories:  C:\PRIVATE         │  Same...
  466.                   C:\PUBLIC          │
  467.                                      │
  468.   User uploads a file, gets placed   │  Same...
  469.   in C:\PRIVATE by PCBoard           │
  470.                                      │
  471.   ULP tests it online                │  Same...
  472.                                      │
  473.   PCBoard leaves file in C:\PRIVATE  │  If it passes, PCBoard moves it to
  474.                                      │  C:\PUBLIC; if it fails, PCBoard
  475.                                      │  leaves it in C:\PRIVATE
  476.                                      │
  477.   ULP in the event processes all     │  ULP in the event processes all *new*
  478.   new uploads found in C:\PRIVATE    │  uploads found in C:\PUBLIC since the
  479.   since the last event and moves     │  last event
  480.   all good uploads to C:\PUBLIC      │
  481.  
  482. Further, ULP's online testing modes also have three different modes of
  483. operation:  slow, normal and fast.  Slow mode completely tests the upload
  484. exactly as ULP does in the batch event.  Note that you MUST use the "all
  485. uploads public" mode of operation to run slow mode (this shouldn't be a
  486. problem, since there's little logic in forcing a user to wait for complete
  487. processing of an upload, only to be held private until later).
  488.  
  489. ULP's online normal mode de-compresses the files, performs file, duplication
  490. and age checking, and then deletes the extracted files and returns to the BBS,
  491. informing the BBS of the test results.  It does not re-compress the archive,
  492. remove BBS ads, add information lines, etc.; this is saved for the event
  493. processing.  This mode can be used with both setup paradigms, making all
  494. uploads private or public.
  495.  
  496. Fast mode DOES NOT decompress the file; it firsts performs an archive integrity
  497. check, scans ARJ and ZIP archives directly for duplicate and age information,
  498. and then returns to PCBoard (if the archive is not ARJ or ZIP, then normal mode
  499. is forced).  Typical fast mode scans of multi-megabyte archives are performed
  500. in less than 5 seconds!  In fast mode, file checking (viruses, etc.) is left
  501. for ULP to do in the event (which is why the above discussion regarding
  502. private/public directories is important).  This mode can also be used either in
  503. making uploads public or private, although it would be a good idea to make them
  504. private with this mode, since the uploads are not file-checked (e.g. for
  505. viruses) during test.
  506.  
  507. ULP's online testing modes will also accept a redirected ARJ or PKUNZIP listing
  508. text file with the special name VERIFY.ULP (no other name is acceptable) as
  509. input to pre-verify an upload for a user, before the user actually spends his
  510. time uploading the file only to find out it won't pass the limits you set.
  511.  
  512.  
  513. ┌───────────────────┐
  514. │  8. Installation  │
  515. └───────────────────┘
  516.  
  517. Now, on to installation of the ULP system.  ULPSM makes the installation ULP
  518. very easy, since it has a built-in initial installation system and context-
  519. sensitive, cross-referenced and fully indexed online help.  After reading the
  520. general concepts described in the preceding section, the following outlines a
  521. general guide to installing the ULP system in the shortest time:
  522.  
  523. 1. You will need the following programs and utilities for the default ULP
  524.    installation:
  525.  
  526.         ARJ, LHA and PKZIP/PKUNZIP archivers (DOS installations)
  527.         LH/2 and ZIP/UNZIP archivers (OS/2 installations)
  528.         TXT2MSG message importer (both DOS and OS/2 installations)
  529.  
  530.    Many other utilities can be used in conjunction with ULP, but these are
  531.    assumed to be available in the default ULP configuration.
  532.  
  533. 2. Make a subdirectory on your hard drive.  For the purposes of this document,
  534.    we'll call it "C:\ULP".  Unarchive the ULP distribution archive into this
  535.    subdirectory.  You've more than likely already made it this far, since you
  536.    are reading this file. <g>
  537.  
  538.    * NOTE: The help file ULPSM.HLP is required by the ULP programs and must be
  539.            located in the same subdirectory as the ULP executables for proper
  540.            operation!
  541.  
  542. 3. The ULP system opens several files at once for various reasons.  You should
  543.    have a minimum of FILES=40 per node in your system CONFIG.SYS file, since
  544.    ULP is run in conjunction with your BBS.  On the machine/node that runs the
  545.    ULPSM duplication database compilation event, I suggest at least FILES=50,
  546.    since the ULPSM database compilation routine opens up to 20 files
  547.    simultaneously.
  548.  
  549. 4. If you are running ULP under a network or a DOS multitasking operating
  550.    system, you should already have DOS's SHARE.EXE loaded (unless you are using
  551.    a SHARE-compatible network operating system such as Novell).  You must have
  552.    SHARE capabilty loaded in order to take advantage of the file sharing and
  553.    locking methods used by the ULP programs to prevent data loss.  (If you are
  554.    running a single-node system without a multitasker, SHARE is not needed).
  555.  
  556.    * NOTE: MS-DOS has a documented bug when SHARE is loaded high, where it
  557.            loses the table in memory.  Load SHARE low to prevent potential
  558.            sharing problems!
  559.  
  560. 5. Make sure you have your BBS software set to swap out of memory when running
  561.    an upload processor.  This is required due to memory requirements of
  562.    archivers, virus testers, etc., and probably is already set for most BBS
  563.    packages.  Check anyway... <g>
  564.  
  565. 6. Run ULPSM using the following command line:
  566.  
  567.         ULPSM -CULP.CFG
  568.  
  569.    The first time you use a new configuration filename in the ULPSM command
  570.    line, ULPSM will create a configuration file and generate the required
  571.    external files that a standard ULP implementation uses.  When you are asked
  572.    to save the configuration, save it.  From this starting configuration, only
  573.    a few specific adjustments need to be made.  Note that the pre-configured
  574.    archiver command lines are different based upon whether the DOS or OS/2
  575.    version of ULPSM is used to create the configuration file.
  576.  
  577. 7. Run ULPSM again, with the same command line as above.  You will need to make
  578.    the following configuration edits to complete your installation; don't
  579.    forget about the online help...there's a lot of useful information in there!
  580.    In addition, ULPSM will check for common configuration errors and provide
  581.    messages indicating any problems that it may find.
  582.  
  583.        Menu A (General options):
  584.  
  585.          - If you are running PCBoard, enter the full path and filename for
  586.            your DOWNLOAD.TXT file if automatic updating is desired.  Otherwise,
  587.            leave it blank.
  588.  
  589.        Menu B (Upload directories):
  590.  
  591.          - Select an unused slot and press ENTER.  Enter the appropriate
  592.            subdirectories and directory listings for your upload processing.
  593.            Refer to the following section titled "Configuration" and the online
  594.            help for more detail on this topic.  For the time being, you may
  595.            only want to configure one or two sets of upload directories for
  596.            testing purposes.
  597.  
  598.        Menu E (Archivers):
  599.  
  600.          - ULPSM pre-configures the most common archivers used (ARJ, LZH and
  601.            ZIP for DOS, and LZH and ZIP for OS/2).  If one or more of these
  602.            archivers are not available in your DOS or OS/2 path, you will need
  603.            to either put them in the path, provide the path directly in the
  604.            command lines in ULPSM or remove them from the ULP configuration.
  605.            Putting the required archivers in your path is more than likely the
  606.            simplest solution.
  607.  
  608.        Menu F (Virus/file testers):
  609.  
  610.          - Due to the wide variety and utilization of virus scanners available,
  611.            ULPSM makes no assumptions as to what you wish to use.  In this
  612.            menu, configure one or more file and virus testers to be used by
  613.            ULP.  Pay special note to the ULPSM help system, as it contains
  614.            recommended command lines for many of the more popular DOS and OS/2
  615.            virus scanners.
  616.  
  617.        Menu G (Duplication checking):
  618.  
  619.          - If you are using the ZDCS duplication system, you will need to
  620.            change the default setting from 'I' to 'Z', and provide the path to
  621.            ZDCS in the "Edit duplicate checking parameters" submenu.
  622.  
  623.          - If you are using the internal duplication system, you will need to
  624.            build and compile a database.  Select submenu B (Add files to
  625.            duplication database) and use one of your download directories as a
  626.            starting point.  After ULPSM is finished, select submenu C (Compile
  627.            duplication database) to compile the database.  More detail on
  628.            building your database will follow; for now, this will get us a
  629.            working database to tinker with.
  630.  
  631.        Menu J (GIF/JPEG file testing):
  632.  
  633.          - If you wish to use a graphics checking program (e.g. GFXCheck or
  634.            GIFTEST) to test GIF and/or JPEG uploads, place the command line in
  635.            this menu.  Again, refer to the online help for recommended command
  636.            lines.
  637.  
  638.        Menu L (Online testing):
  639.  
  640.          - ULPSM defaults to the normal online testing mode with a switchover
  641.            to fast mode at 500K.  If either slow or fast testing modes are
  642.            desired, alter the settings.
  643.  
  644.        Menu M (Process data file):
  645.  
  646.          - Select submenu B to initialize the process data file.  Generally,
  647.            initialization is required only once, unless otherwise instructed by
  648.            ULPSM.
  649.  
  650.        Menu N (Advanced options):
  651.  
  652.          - If you are not running PCBoard as your BBS software, these settings
  653.            may make integration of ULP into your system easier.  If you are
  654.            running PCBoard, adjustment of these values is usually not necessary
  655.            and will probably break your setup.
  656.  
  657.    Exit ULPSM, saving your configuration edits.
  658.  
  659. 8. Take a look at your ULP subdirectory now.  You will see a dozen or so
  660.    external configuration files that ULPSM automatically created.  These can be
  661.    edited either with a conventional text editor or through ULPSM using the
  662.    F2/F3 hotkeys, where appropriate.
  663.  
  664.    One of the newly-created files needs to be relocated.  Copy the PCBTEST.???
  665.    file to your \PCB subdirectory, copying over the existing one.  Back up your
  666.    old one if you think you might want it back later (I don't think you will,
  667.    though <g>).
  668.  
  669.    You will also find a file named ULPBLT.  This is a generic bulletin that you
  670.    may wish to post on your BBS to explain to your users the process for pre-
  671.    verifying uploads to your system via ULP.
  672.  
  673. 9. You are now all configured, and almost ready to go.  You now need to build
  674.    a complete ULP database if you are using the internal duplication database.
  675.    This can be postponed until later if you wish to do some testing or
  676.    experimentation with ULP prior to investing the time in constructing a
  677.    complete duplication database.  Refer to the section titled "Internal
  678.    Duplication Checking" for additional discussion.
  679.  
  680. 10. Edit your system event file, adding the following lines somewhere in it:
  681.  
  682.         C:                         ─────────────────┐  Change as necessary
  683.         CD \ULP                    ─────────────────┘  to match your setup
  684.         ULP -CULP.CFG -MBATCH -T0
  685.         ULPSM -CULP.CFG -S -T0
  686.  
  687.    This will run the ULP event batch processor and then compile your
  688.    duplication database with ULPSM (the last line is required only if you are
  689.    using ULP's internal duplication database system).
  690.  
  691. 11. That wasn't so bad, now was it?  Feel free to poke around with other
  692.    settings once you have verified that ULP is functioning properly.
  693.  
  694.  
  695. ┌────────────────────┐
  696. │  9. Configuration  │
  697. └────────────────────┘
  698.  
  699. Most of the information required to install ULP is contained in the online help
  700. system in ULPSM.  This exhaustive information will not be repeated here for
  701. brevity, but some topics that require additional clarification will be
  702. addressed here.
  703.  
  704. UPLOAD DIRECTORIES:
  705. ───────────────────
  706. In the past, this topic has been a point of some confusion to sysops.  ULP
  707. makes use of the upload directories configured in ULPSM during both online and
  708. batch processing, but in different ways.
  709.  
  710. When testing a file online, ULP is provided all necessary information by the
  711. BBS software.  It really doesn't need any of the upload directories defined in
  712. the ULP configuration; however, it does a comparison to the path passed by the
  713. BBS software and the areas configured to try and find a match.  If a match is
  714. found, ULP will use any area-specific settings (e.g. duplication and age
  715. limits) that are configured.  If no match is found, ULP will spit out a warning
  716. and continue with the default settings.
  717.  
  718. On the other hand, during batch (and override) processing, ULP makes extensive
  719. use of the upload directory configuration.  It will go through all upload
  720. directory sets configured, in order, processing any new files found in the
  721. source area, moving the good files to the destination (if configured) and any
  722. defective files to the failure area (if configured).
  723.  
  724. It is extremely important that you do not use one upload directory set's
  725. destination or failure subdirectory as a another set's source directory.  This
  726. can cause files to processed multiple times, resulting in duplication failures
  727. and other headaches.
  728.  
  729. Generally, if you make all uploads private, your source area will be your
  730. private upload area and the destination area will be your public upload area.
  731. If you make all uploads public, the source area will be your public upload area
  732. and the destination area will be blank.  In either case, failure areas can be
  733. used if desired.  Refer to the section titled "Conceptual Background" for more
  734. detail.
  735.  
  736. ONLINE TESTING:
  737. ───────────────
  738. To use ULP for on-line testing of archives, the following command line should
  739. be invoked.  During the initial configuration, ULPSM creates a PCBTEST.BAT for
  740. PCBoard sysops to use, which should be all that is necessary for PCBoard
  741. sysops.
  742.  
  743.     C:\ULP\ULP.EXE -CC:\ULP\ULP.CFG -F%1 -M%2 -D%3 -T0
  744.  
  745. However, for non-PCBoard sysops, the following discussion outlines how to
  746. install ULP for online testing in your BBS package.
  747.  
  748. Two of the three passed % parameters to the batch file are required:  the
  749. filename to test, passed as %1 by PCBoard and the mode, passed as %2.  The
  750. temporary description file, passed as %3, is not required but will be updated
  751. by ULP if passed.
  752.  
  753. The filename (-F switch) should include a complete pathspec.  ULP will compare
  754. the path to the source upload directories configured in ULPSM, and if a match
  755. is found, ULP will use any directory-specific settings configured.  Therefore,
  756. the path(s) configured in ULPSM should match those configured in your BBS
  757. software for new uploads.
  758.  
  759. The only acceptable modes (-M switch) for online testing are "UPLOAD", "TEST"
  760. and "ATTACH" (these correspond to PCBoard's modes).  Upload mode is basically a
  761. full process, and is the most commonly-used mode.  Test mode unpacks the
  762. upload, performs file-checking and returns; this is done to allow the online
  763. user to test a file on the BBS in case a problem is found after download.
  764. Attach mode performs a complete test, but doesn't fail the upload under any
  765. circumstances; this is used primarily for attaching file to messages on the
  766. BBS.
  767.  
  768. The temporary description file (-D) is created by the BBS software and is
  769. expected to be in a format identical to the other upload directories as
  770. configured.  If it is not, do not use this parameter and let the event mode
  771. execution of ULP update the description.
  772.  
  773. SERIAL I/O DEFINITION:
  774. ──────────────────────
  775. ULP will gather any information that is required for operation from the door
  776. drop file located in the startup subdirectory (PCBOARD.SYS and DOOR.SYS are
  777. supported).  If desired, the serial port information can be handed directly to
  778. ULP by using the -P and -B command switches:
  779.  
  780.     C:\ULP\ULP.EXE -CC:\ULP\ULP.CFG -F%1 -M%2 -D%3 -P3E8,5 -B57600
  781.  
  782. The -P parameter can be 1 or 2, representing standard COM1 and COM2, or in the
  783. format "address,IRQ" as illustrated above for non-standard serial ports.  If -P
  784. is set to 0, this will suppress the remote comm I/O entirely.  The locked DTE
  785. baud rate of the port (not the DCE carrier speed) can be passed via the -B
  786. parameter.
  787.  
  788. If you are using the DSZPORT environment variable to define the port IRQ and
  789. address to DSZ, ULP can also use this information as well.  If the drop file
  790. indicates that a non-standard port is in use (e.g. not COM1 or COM2), ULP will
  791. automatically look for the DSZPORT environment variable.  Refer to the DSZ
  792. documentation for the proper specification of the DSZPORT environment variable
  793. (short version: it looks like the -P parameter, "SET DSZPORT=3E8,5").
  794.  
  795. ULP is capable of using a FOSSIL driver, but you must tell it to do so via the
  796. ULP command line.  Use the -X command switch to tell ULP to use the FOSSIL
  797. driver:
  798.  
  799.     C:\ULP\ULP.EXE -CC:\ULP\ULP.CFG -F%1 -M%2 -D%3 -X
  800.  
  801. ULP will use the port specified in the door drop file or on the command line
  802. via the -P switch.  As a quick technical aside, with most FOSSIL drivers, the
  803. FOSSIL port number is normally 1 less than the COM port number.  In other
  804. words, COM1 is FOSSIL port 0, COM2 is FOSSIL port 1, etc..  ULP handles this
  805. conversion internally, but if necessary, you can force a specific port number
  806. via the -P command line parameter:
  807.  
  808.     C:\ULP\ULP.EXE -CC:\ULP\ULP.CFG -F%1 -M%2 -D%3 -P1 -X
  809.  
  810. The above command line will force ULP to use FOSSIL port 0, which is by
  811. convention, COM1.
  812.  
  813. Similarly, the DOS ULP is also capable of talking directly to the OS/2 SIO API.
  814. In order to use this mode, you must tell ULP to do so via the -O command line
  815. switch:
  816.  
  817.     C:\ULP\ULP.EXE -CC:\ULP\ULP.CFG -F%1 -M%2 -D%3 -O
  818.  
  819. Note that the OS/2 version of ULP obviously must use the OS/2 SIO API, so the
  820. -O switch is not required (but is accepted for compatibility's sake).
  821.  
  822. REMOTE DISPLAY TEMPLATES:
  823. ─────────────────────────
  824. The remote display templates offer tremendous flexibility for sysops to
  825. customize the user display that is produced by ULP.  While the template file
  826. design may seem a bit odd, it provides maximum flexibility for customization.
  827.  
  828. Basically, display templates are comprised of two sections: the form, and the
  829. responses.  When ULP is started up to perform an online test, the appropriate
  830. template is loaded and the form is immediately displayed.  Special {-variables
  831. are used in the form to tell ULP where in the form to put the responses.
  832.  
  833. As the file is processed by ULP, at special points in the processing ULP will
  834. output the responses, selecting the appropriate response based upon pass or
  835. failure.  If a process is not performed (such as packing when testing in normal
  836. or fast modes), no response is output for that process.  The form can be edited
  837. to eliminate these unnecessary lines if desired and appropriate.
  838.  
  839. As an example, review the following simple display template:
  840.  
  841.     ;
  842.     ; ****************************************************
  843.     ; *  UpLoadProcessor sample remote display template  *
  844.     ; ****************************************************
  845.     ;
  846.     ; Form definition
  847.     ;
  848.     BEGIN_FORM
  849.     Verifying @FILENAME@ from @USER@ on node @NODE@...
  850.     ┌─────────────────────────┐
  851.     │   UpLoadProcessor @VERSION@  │  Registered to: @BOARDNAME@
  852.     │ (c) 1992-96 Stacy Smith │  [Processing at @SYSTIME@ on @SYSDATE@]
  853.     └─────────────────────────┘
  854.         Upload format:          {FMT}
  855.         Unpacking file:         {UNP}
  856.         Testing file integrity: {CHK}
  857.         Duplicate checking:     {DUP}
  858.         Age checking:           {AGE}
  859.         Packing archive:        {PCK}
  860.         Other checks:           {MSC}
  861.     END_FORM
  862.     ;
  863.     ; Response definitions
  864.     ;
  865.     BEGIN_RESPONSES
  866.     @OPTEXT@
  867.     @OPTEXT@
  868.     Unpacked OK
  869.     Unpacking failure!
  870.     Passed virus checks
  871.     Failed virus checks
  872.     Passed duplication
  873.     Failed duplication
  874.     Passed age
  875.     Failed age
  876.     Compressed OK
  877.     Compressing failure
  878.     OK
  879.     Failed!
  880.     END_RESPONSES
  881.     ;
  882.     ; End of UpLoadProcessor template file
  883.     ;
  884.  
  885. The actual form is sandwiched between the two keywords "BEGIN_FORM" and
  886. "END_FORM"; 18 lines by 78 columns is the maximum size allowed in the form.
  887. Various @-variables can be used in the form and responses.  A complete list is
  888. in the ULPSM online help; unsupported @-variables will not be translated.
  889. There is no support for @CLS@; the reason for this is that ULP automatically
  890. clears the screen before displaying the form.  This allows ULP to properly
  891. determine the screen location of responses on a consistent basis.
  892.  
  893. Note the special variables {FMT}, {UNP}, {CHK}, {DUP}, {AGE}, {PCK} and {MSC}.
  894. These variables do nothing except tell ULP where the specific responses are to
  895. be located, and have a different format to help prevent confusion.  During form
  896. display, they are removed with no output so that they can ignored when
  897. attempting to align text.  The following table defines the meaning of these
  898. seven special macros:
  899.  
  900.     {FMT}   Location for the upload file format known/unknown response
  901.     {UNP}   Location for the unpacking pass/fail response
  902.     {CHK}   Location for the file/virus checking pass/fail response
  903.     {DUP}   Location for the duplicate checking pass/fail response
  904.     {AGE}   Location for the age checking pass/fail response
  905.     {PCK}   Location for the packing pass/fail response
  906.     {MSC}   Location for the miscellaneous pass/fail response
  907.  
  908. The "miscellaneous tests" defined are primarily the TCANs.  This response is
  909. always the last response displayed during processing.
  910.  
  911. Similarly, the responses are sandwiched between the two keywords
  912. "BEGIN_RESPONSES" and "END_RESPONSES".  @-variables can also be used in the
  913. form and responses, but all responses must be 50 characters or less.  The order
  914. of the responses is critical; no responses can be skipped (but they can be left
  915. blank).  The response order is as follows:
  916.  
  917.     BEGIN_RESPONSES
  918.     Archive format identified response string (usually just @OPTEXT@)
  919.     Archive format unknown response string (usually just @OPTEXT@)
  920.     Unpacking passed response string
  921.     Unpacking failed response string
  922.     File/virus checking passed response string
  923.     File/virus checking failed response string
  924.     Duplicate checking passed response string
  925.     Duplicate checking failed response string
  926.     Age checking passed response string
  927.     Age checking failed response string
  928.     Packing passed response string
  929.     Packing failed response string
  930.     Miscellaneous tests passed response string
  931.     Miscellaneous tests failed response string
  932.     END_RESPONSES
  933.  
  934. A special macro called @OPTEXT@ can be used in the responses.  For each
  935. possible response, the @OPTEXT@ macro will be loaded with special process-
  936. specific information, such as duplication ratio and archive age.  The following
  937. list describes the contents of the @OPTEXT@ macro for each of the seven
  938. possible responses:
  939.  
  940.     {FMT}   @OPTEXT@ contains the archiving format extension or "Unknown"; if
  941.             the archive has an -AV or is secured, @OPTEXT@ will be appended
  942.             with "(-AV/secure)".
  943.     {UNP}   @OPTEXT@ contains the program name used to unpack the upload.
  944.     {CHK}   @OPTEXT@ contains the last file checker executed (primarily for
  945.             failures).
  946.     {DUP}   @OPTEXT@ contains the total and executable duplication ratios in
  947.             the format "100%/100%".
  948.     {AGE}   @OPTEXT@ contains the age of the archive in months.
  949.     {PCK}   @OPTEXT@ contains the program name used to pack the upload.
  950.     {MSC}   @OPTEXT@ contains the name of the test (primarily for failures).
  951.  
  952. Note that by displaying results to the remote user can be a double-edged sword.
  953. While it can prevent the requisite questions from a user as to why an upload
  954. failed, this could also allow the "clever" user to bypass a failure by tweaking
  955. the archive contents just enough to make it pass.  Consider this before you use
  956. the @OPTEXT@ response macros.
  957.  
  958. All comments in the template file begin with a semi-colon, however, comments
  959. are not permitted between the BEGIN_FORM and END_FORM form definition or
  960. between the BEGIN_RESPONSES and END_RESPONSES response definition.
  961.  
  962. * NOTE: While the remote display template system is designed primarily for
  963.         ASCII and ANSI, RIP screens *may* be possible (I don't know as I
  964.         haven't tried it) by creating the appropriate RIP script command
  965.         strings in the form and response definitions.  However, the RIP
  966.         graphics will not be shown in the local display window.
  967.  
  968. For those who may be curious, the above example template will produce a display
  969. that looks like (for a passed upload):
  970.  
  971.     Verifying FOO.ZIP from JOE BLOW on node 4...
  972.     ┌─────────────────────────┐
  973.     │   UpLoadProcessor 2.20  │  Registered to: Nice Guys 'R Us
  974.     │ (c) 1992-96 Stacy Smith │  [Processing at 12:01 on 01/02/95]
  975.     └─────────────────────────┘
  976.         Upload format:          ZIP
  977.         Unpacking file:         Unpacked OK
  978.         Testing file integrity: Passed virus checks
  979.         Duplicate checking:     Passed duplication
  980.         Age checking:           Passed age
  981.         Packing archive:        Compressed OK
  982.         Other checks:           OK
  983.  
  984. By using the F4 hotkey in ULPSM, you can preview your display template, taking
  985. into consideration your current ULP configuration.
  986.  
  987. ULP fully supports multi-lingual display templates through the use of PCBoard
  988. conventions.  If you are offering multiple language PCBTEXT files, you can
  989. create multiple language display templates of the same extension and ULP will
  990. automatically select the appropriate language template, if one exists (if not,
  991. ULP will use the base template).
  992.  
  993. COMMENT TEMPLATE:
  994. ─────────────────
  995. The comment template allows customization of a comment for each file processed
  996. through the use of @-variables.  Archive statistics, file descriptions,
  997. processing date and time, BBS advertising, etc. can all be implemented in this
  998. template for display by using @-variables.  A complete list of @-variables and
  999. macros is available in the online help.  The following is a suggested comment
  1000. template:
  1001.  
  1002.     ┌─────────────────────────────────────────────────────────────────────────┐
  1003.     │  This archive has been fully tested and verified using UpLoadProcessor  │
  1004.     │     by your Sysop to ensure your system's safety and file quality!      │
  1005.     └─────────────────────────────────────────────────────────────────────────┘
  1006.  
  1007.                          Processed at @SYSTIME@ on @SYSDATE@
  1008.  
  1009.     Archive statistics:
  1010.         Number of files:  @NUM@
  1011.         Oldest file:      @OLD@
  1012.         Newest file:      @NEW@
  1013.         Total bytes:      @BYTE@
  1014.  
  1015.     Archive description:
  1016.     ───────────────────────────────────────────────────────────────────────────
  1017.     @DESC@
  1018.     ───────────────────────────────────────────────────────────────────────────
  1019.  
  1020. MESSAGE TEMPLATES:
  1021. ──────────────────
  1022. The message templates also offer a high degree of flexibility for sysops to
  1023. customize messages automatically generated by ULP during upload testing to the
  1024. online user and/or the BBS sysop.  By default, a user message is sent to the
  1025. online user and the sysop message is sent to "SYSOP" in conference number 0
  1026. (the main board conference for PCBoard systems) using a third-party message
  1027. insertion utility such as TXT2MSG for PCBoard.
  1028.  
  1029. The message template file(s) include both a fail message and a pass message;
  1030. this allows for different messages to be sent based upon test results.  Two
  1031. special control statements can be used to alter both the recipient and
  1032. conference (MSG_TO_NAME and MSG_CONF, respectively).  Review the following
  1033. sample user message template:
  1034.  
  1035.     ;
  1036.     ; *******************************************
  1037.     ; *  UpLoadProcessor user message template  *
  1038.     ; *******************************************
  1039.     ;
  1040.     MSG_FROM_NAME UpLoadProcessor
  1041.     ;
  1042.     ; Failed upload message
  1043.     ;
  1044.     MSG_CONF 1
  1045.     MSG_OPT -rly
  1046.     BEGIN_FAIL_MSG
  1047.     Hello @FIRST@,
  1048.  
  1049.     Thanks for the upload of @FILENAME@.@OFEXT@; unfortunately, it failed
  1050.     UpLoadProcessor's validation for the following reason:
  1051.  
  1052.         @FAILTEXT@
  1053.  
  1054.     If you believe this disposition was made in error, please contact the
  1055.     sysop.
  1056.  
  1057.     Thanks again for uploading and please try again soon!
  1058.     END_FAIL_MSG
  1059.     ;
  1060.     ; Successful (passed) upload message
  1061.     ;
  1062.     MSG_TO_NAME all
  1063.     MSG_CONF 0
  1064.     MSG_OPT -ply
  1065.     BEGIN_PASS_MSG
  1066.     Hello all,
  1067.  
  1068.     @USER@ has uploaded the new file @FILENAME@.@NFEXT@ to conference
  1069.     number @CONFNUM@:
  1070.  
  1071.     Upload size:      @NSIZE@ bytes
  1072.     Number of files:  @NUM@
  1073.     Dated:            @OLD@ - @NEW@
  1074.  
  1075.     Description follows
  1076.     ---------------------------------------------------------------------
  1077.     @DESC@
  1078.     ---------------------------------------------------------------------
  1079.  
  1080.     If this file looks of interest to you, take a look in the new uploads
  1081.     directory for it.  Thanks to @FIRST@ for the upload!
  1082.     END_PASS_MSG
  1083.     ;
  1084.     ; End of UpLoadProcessor template file
  1085.     ;
  1086.  
  1087. Notice that the message bodies are sandwiched between two pairs of control
  1088. statements, "BEGIN_FAIL_MSG" / "END_FAIL_MSG" and "BEGIN_PASS_MSG" /
  1089. "END_PASS_MSG".  If no fail or no pass message is desired, then that message
  1090. section of the template can be omitted.  All comments in the message template
  1091. file begin with a semi-colon, however, comments are not permitted in the
  1092. message body.
  1093.  
  1094. Most of the available @-variables can be used in the message body; a complete
  1095. list is in the ULPSM online help and unsupported @-variables are not
  1096. translated.  Note that @X color codes should not be used, as they will be
  1097. translated into ANSI codes which is not desirable for message bases.
  1098.  
  1099. In the above example template, the fail message has been redirected to
  1100. conference number 1 via the "MSG_CONF 1" before the fail message body line, and
  1101. the pass message directed to conference 0 to all users via the "MSG_CONF 0" and
  1102. "MSG_TO_NAME all" lines before the pass message body.  Furthermore, through the
  1103. user of the "MSG_OPT" parameter, the fail message has been made private (-r for
  1104. TXT2MSG) and the pass message is public (-p).  For the above example template,
  1105. the fail message will look something like:
  1106.  
  1107.     Hello Joe,
  1108.  
  1109.     Thanks for the upload of FILENAME.ZIP; unfortunately, it failed
  1110.     UpLoadProcessor's validation for the following reason:
  1111.  
  1112.         Age (60 months)
  1113.  
  1114.     If you believe this disposition was made in error, please contact the
  1115.     sysop.
  1116.  
  1117.     Thanks again for uploading and please try again soon!
  1118.  
  1119. and the pass message:
  1120.  
  1121.     Hello all,
  1122.  
  1123.     JOE BLOW has uploaded the new file FILENAME.ZIP to conference
  1124.     number 0:
  1125.  
  1126.     Upload size:      123456 bytes
  1127.     Number of files:  10
  1128.     Dated:            01-01-95 - 01-01-96
  1129.  
  1130.     Description follows
  1131.     ---------------------------------------------------------------------
  1132.     FILENAME.ZIP   123456  01-01-96  Cool brand spaking new file!
  1133.     ---------------------------------------------------------------------
  1134.  
  1135.     If this file looks of interest to you, take a look in the new uploads
  1136.     directory for it.  Thanks to Joe for the upload!
  1137.  
  1138. Failure-specific message templates can also be created by appending the failure
  1139. extension to the base filename.  For example, if your generic user template is
  1140. named "USER", a special template for duplication failures (extenion ".DUP") can
  1141. be used by naming it "USERDUP".  This can be of great help for sysops who get a
  1142. lot of questions regarding certain types of failures.  A complete list of
  1143. failure extensions is located elsewhere in this document.  No pass message
  1144. definition is required for failure-specific templates; the pass message will
  1145. always be extracted from the base (generic) message template.
  1146.  
  1147. ULP also supports multi-lingual message templates.  If you are offering
  1148. multiple language PCBTEXT files, you can create multiple language message
  1149. templates of the same extension and ULP will automatically select the
  1150. appropriate language template, if one exists (if not, ULP will use the base
  1151. template).
  1152.  
  1153.  
  1154. ┌─────────────────────────────────────┐
  1155. │  10. Internal Duplication Checking  │
  1156. └─────────────────────────────────────┘
  1157.  
  1158. When first installing ULP, if you plan to use ULP's internal duplication
  1159. database system, the duplication database must be created from scratch.  If you
  1160. have mostly ZIP and ARJ files, then this can be very quick (on the order of 5
  1161. minutes per 1000 archives on a hard disk, CD-ROMs typically take between 30
  1162. minutes and an hour...these numbers are from my experience, your mileage may
  1163. vary).  As usual, the online help provides a lot of useful information on
  1164. specific duplication database manipulation options.
  1165.  
  1166. If you use CD-ROMs on your BBS, pre-built databases may already be available
  1167. for your CD-ROM, greatly reducing the amount of time required to get your
  1168. system ready.  ULPSM can merge these pre-built duplication databases with your
  1169. main database in a matter of seconds versus spending the time building it
  1170. yourself.
  1171.  
  1172. If you are a user of the FWKCS duplication database system, ULPSM can import
  1173. and translate the FWKCS database directly into the ULP format.  This will also
  1174. be preferable from a speed standpoint to rebuilding the database from scratch.
  1175.  
  1176. If you have files that are off-line, they can be added to your duplication
  1177. database fairly easily.  Simply copy your offline files to a temp directory
  1178. (for the sake of argumentation, let's call it "C:\TEMP").  You can then add
  1179. them to the duplication database via ULPSM.  After the offline files are added,
  1180. just delete them from the temporary subdirectory, and if someone uploads a file
  1181. that you already have off-line, it will be rejected by ULP.
  1182.  
  1183. Once you have your database built, regular maintenance on the duplication
  1184. database files is required.  This will compile any new data from the day's
  1185. uploads into the main database, and remove any added temporary data from ULP's
  1186. online testing.  This is not required to be done every day, but performance
  1187. will degrade as more and more files (e.g. hundreds or thousands of uploads) are
  1188. processed without compilation.
  1189.  
  1190. To control duplication database size, database entries can also be purged from
  1191. the database.  Removal is based upon the file date represented by the entry,
  1192. NOT the date the file entry was made into the database; these are not one and
  1193. the same.  In general, this function is not required...ULP's internal database
  1194. system sees no performance degradation until the database exceeds 30 megabytes
  1195. (as a baseline, about 75 full CD-ROMs), which no one has even come close to
  1196. yet.  If you do wish to purge, purge using an age of at least twice your
  1197. configured age limit...this will help ensure that required data is maintained.
  1198.  
  1199. Note that ULPSM also locks the duplication database, preventing any other
  1200. program, including ULP, from accessing it.  I strongly suggest you have uploads
  1201. disabled when running ULPSM to compile your database to prevent upload failures
  1202. due to the inability to access the database.  At the minimum, perform the
  1203. compilation at a time when uploads are not likely to occur.
  1204.  
  1205. As with any other database system, you should backup your ULP duplication
  1206. database and index files regularly.  ULPSM validates your duplication database
  1207. during compilation to ensure that it hasn't been corrupted, but if corruption
  1208. occurs (due to crashes, power loss, deletion, bad karma, etc.), the database
  1209. may not be repairable.  Therefore, backup regularly!!!
  1210.  
  1211.  
  1212. ┌────────────────────┐
  1213. │  11. Other Topics  │
  1214. └────────────────────┘
  1215.  
  1216. While the ULP system is mostly automatic, there are some occasions where
  1217. operations may have to be done manually.  The following topics discuss some of
  1218. the issues related to running ULP manually, including some command line
  1219. switches.
  1220.  
  1221. OS/2 SPECIFIC VERSION (ULP & ULPSM):
  1222. ────────────────────────────────────
  1223. The OS/2 executables of ULP and ULPSM are native 32-bit executables that
  1224. require OS/2 version 2.0 or later.  They are completely compatible with the DOS
  1225. versions of ULP and ULPSM, including all configuration and data files, but do
  1226. not have some of the functional limits imposed on the DOS versions due to
  1227. memory constraints.
  1228.  
  1229. However, it should be noted that separate configurations will be required if
  1230. you wish to use both the DOS and OS/2 versions of the ULP programs since the
  1231. external utilities are different in both name and command lines.  For example,
  1232. since PKWARE hasn't updated their PKZIP program for OS/2 beyond version 1.02,
  1233. you will need to use an alternate ZIP program, such as InfoZIP's ZIP 2.0.1 or
  1234. later.  These command lines are, of course, different, hence different ULP
  1235. configuration files are required.
  1236.  
  1237. In addition, during testing, enhanced speed has been noted when *not* running
  1238. external programs in a window.  This is partly due to the VIO speed of OS/2 and
  1239. CPU overhead of the I/O redirection thread.
  1240.  
  1241. You should not use DOS external programs in the OS/2 version of ULP.  However,
  1242. if you must use an occasional DOS program, you should use PipeDOS, a utility by
  1243. Scott Maxwell that correctly passes the program errorlevel back to the calling
  1244. OS/2 program, which is a requirement for ULP to operate correctly.  After
  1245. installing PipeDOS per it's instructions, simply configure the DOS command line
  1246. as you normally would in ULPSM, but the first argument before the program name
  1247. will be "pipedos", e.g.:
  1248.  
  1249.     pipedos command arg1 arg2 ...
  1250.  
  1251. PipeDOS-called DOS programs should not be run in a window.  Also, PipeDOS-
  1252. called programs are very slow, so I recommend you use them only for programs
  1253. that are called infrequently and that don't have OS/2 counterparts (e.g. ARJ).
  1254.  
  1255. MICROSOFT WINDOWS (ULP & ULPSM):
  1256. ────────────────────────────────
  1257. Do not enable idle detection in Windows 3.x or Windows 95 (e.g. don't check the
  1258. "Detect Idle" box of the Advanced Settings of the PIF file).  Doing so may
  1259. cause Windows to take away so many time slices from ULP in the background that
  1260. it will appear to hang (until brought back into the foreground or a key is
  1261. pressed).  ULP gives away time slices without requiring Windows to do it's
  1262. thinking for it (what little thinking Windoze does <g>).
  1263.  
  1264. DESQVIEW (ULP & ULPSM):
  1265. ───────────────────────
  1266. The DOS versions ULP and ULPSM write text directly to video for speed.  If you
  1267. experience bleed-through of the ULP video in DESQview, you may need to enable
  1268. the flag for those windows that will run the ULP software to tell DESQview that
  1269. applications write directly to video (first page of settings, near the bottom).
  1270. That should eliminate the bleed-through.
  1271.  
  1272. ONLINE HELP (ULPSM):
  1273. ────────────────────
  1274. The online help is fully indexed and cross-referenced with other related topics
  1275. to ease navigation through the database.  If some fields seem to have
  1276. relatively little information, this generally means that another topic,
  1277. normally on a higher-level menu, has more in-depth information.  If you have
  1278. difficulty finding a topic, go into the index and locate the pertinent titles
  1279. to find the help you need.
  1280.  
  1281. If you do not have a mouse to help navigate ULPSM's online help screens, the
  1282. "Index" buttom can be activated by pressing the Alt-I key combination.  Also,
  1283. the "Prev" button is accessed by Alt-F1 and "Quit" is the same as pressing ESC.
  1284.  
  1285. The general idea behind ULP's documentation is that this document outlines how
  1286. to best install and use ULP.  The online help outlines detailed configuration
  1287. information and some instructional information on ULPSM.
  1288.  
  1289. DISPLAY READABILITY (ULP & ULPSM):
  1290. ──────────────────────────────────
  1291. ULP and ULPSM both utilize time delays at certain points in the process to
  1292. allow users to see what's going on with ULP.  The default time delay is 3
  1293. seconds, but can be altered between 0 and 10 seconds via the -T command line
  1294. switch.  Generally, during the event batch processing and online processing of
  1295. uploads, you should set the time delay to 0 for maximum speed.  For example, to
  1296. change the time delay to 5 seconds for a run of ULPSM:
  1297.  
  1298.     ULPSM -CULP.CFG -T5
  1299.  
  1300. When manually running ULP or trying to debug a configuration error, it may be
  1301. helpful to use a longer time delay to see exactly what ULP is doing normally at
  1302. high speed.
  1303.  
  1304. QUIET (ULP & ULPSM):
  1305. ────────────────────
  1306. ULP and ULPSM normally issue a beep on an error or warning, but the beep can be
  1307. disabled using the -Q switch:
  1308.  
  1309.     ULP -CULP.CFG -MBATCH -Q
  1310.     ULPSM -CULP.CFG -Q
  1311.  
  1312. ESCAPING FROM LONG PROCESSES (ULP & ULPSM):
  1313. ───────────────────────────────────────────
  1314. When running long, time-consuming processes, namely ULP's batch processing
  1315. modes and ULPSM's database addition, it is possible to abort the process by
  1316. pressing the ESC key.  Note that ULP and ULPSM may not immediately respond!
  1317. They must finish the current task before allowing you to abort the process.
  1318. Further, if you are processing multiple subdirectories in a run, the abort will
  1319. affect only the current subdirectory.  ULP and ULPSM will start the next
  1320. subdirectory after cleaning up from the current abort.  This allows you to pick
  1321. and choose what to process if desired.
  1322.  
  1323. GIF/JPEG PROCESSING (ULP):
  1324. ──────────────────────────
  1325. By default, GIF and JPEG file detection and processing is enabled.  In order to
  1326. disable all GIF and/or JPEG file processing, set all three of the minimum image
  1327. parameters to 0.  In doing so, you disable not only the file processing, but
  1328. the file format detection, resulting in a GIF or JPEG upload being rejected as
  1329. an unknown format.
  1330.  
  1331. On the other hand, if you wish to accept *all* GIF or JPEG files, regardless of
  1332. image parameters, set the minimum image width and height to 0, but set the
  1333. minimum number of colors to 1 (all graphic images have at least 2 colors).
  1334. This will have the effect of detecting and processing the requested graphic
  1335. format without rejecting based upon image values.
  1336.  
  1337. DEBUGGING (ULP):
  1338. ────────────────
  1339. When attempting to find a configuration error or track down a potential bug in
  1340. ULP, using debug mode will be a great help.  Debug mode will slow down the ULP
  1341. display, force all external programs to run full-screen and dump virtually all
  1342. screen output to the log file.  To use debug mode, add the -! switch:
  1343.  
  1344.     ULP -CULP.CFG -MBATCH -!
  1345.  
  1346. ALL BUG REPORTS MUST BE ACCOMPANIED BY A DEBUG LOG for me to be able to figure
  1347. out the problem.  Note that if you are experiencing a problem that causes a
  1348. system hang, the debug log is in the data work subdirectory with a filename
  1349. "$LOG????".
  1350.  
  1351. OVERRIDE MODE (ULP):
  1352. ────────────────────
  1353. During the course of operation, ULP may (depending upon your configuration)
  1354. rename archives that have been found to be defective in some manner according
  1355. to the following convention:
  1356.  
  1357.     .UNK    Unknown archive format
  1358.     .DOS    DOS reserved keyword found in archive
  1359.     .ERR    Error occurred while unpacking archive (archive integrity failure)
  1360.     .CHK    Error found while file checking archive file (virus, etc.)
  1361.     .DUP    Excessive duplicate files contained in archive
  1362.     .PCK    Error occurred while repacking archive file
  1363.     .AGE    Age limit exceeded by archive file
  1364.     .ENC    Encrypted file found in archive
  1365.     .TCN    File was TCANned
  1366.     .BAD    Error found while testing GIF file
  1367.     .RES    Unacceptable GIF or JPEG resolution
  1368.     .GLT    GIF compressed with GIFLITE
  1369.     .WRK    Unable to create work space for processing file
  1370.     .MTY    Empty archive detected
  1371.  
  1372. If you feel that these files are acceptable after reviewing them, you can force
  1373. them to be accepted by using override mode, e.g.:
  1374.  
  1375.     ULP -CULP.CFG -MOVERRIDE
  1376.  
  1377. This will re-process ALL files in the source area (or the failure area, if that
  1378. is where the defective files are) and ignore the results of TCANs, duplication
  1379. and age, moving them to the destination area (if configured).  Override mode
  1380. will not override unpacking, packing, integrity and virus errors, however, for
  1381. the safety of your board and your users.  Also, override mode is of little use
  1382. if your upload areas are not utilizing a destination area.
  1383.  
  1384. If selected files need to be overridden, but not the entire set of failed
  1385. uploads, you can specify a filespec on the command line via the -F switch.  For
  1386. example:
  1387.  
  1388.     ULP -CULP.CFG -MOVERRIDE -FFILENAME.ZIP
  1389.     ULP -CULP.CFG -MOVERRIDE -F*.ARJ
  1390.  
  1391. Since override mode operates on the upload directory sets configured in ULPSM,
  1392. paths are not required or supported in the filespec passed in the -F switch for
  1393. override mode.  Any included path in the -F parameter will be ignored by ULP.
  1394.  
  1395. RETEST MODE (ULP):
  1396. ──────────────────
  1397. ULP can retest for viruses, etc. all archives found in the subdirectory passed
  1398. to it via the -F switch.  ULP will not perform any TCANning, duplication
  1399. checking or age checking, nor will it repack the archive.  It will simply
  1400. unpack and archive and file check it; this allows sysops to use newer versions
  1401. of virus scanners periodically to look for viruses that may have been missed
  1402. during the original file processing with an older revision of the virus
  1403. checker.  Some example command lines:
  1404.  
  1405.     ULP -CULP.CFG -MRETEST -FD:\PATH\
  1406.     ULP -CULP.CFG -MRETEST -FD:\PATH\*.ZIP
  1407.  
  1408. CONVERT MODE (ULP):
  1409. ───────────────────
  1410. ULP can also perform a mass conversion of the archives found in the path passed
  1411. to it to your default archiver.  ULP will retest and convert all archives found
  1412. in the subdirectory indicated using the same processing flags as new uploads.
  1413. For example:
  1414.  
  1415.     ULP -CULP.CFG -MCONVERT -FD:\PATH\
  1416.     ULP -CULP.CFG -MCONVERT -FD:\PATH\*.ARJ
  1417.  
  1418. Convert mode does not perform any description insertion or updating; it is
  1419. primarily to permit mass conversion of archives in bulk from one format to
  1420. another.
  1421.  
  1422. LOCAL MODE (ULP):
  1423. ─────────────────
  1424. When ULP performs online testing, it expects to find a door drop file and to
  1425. generate a remote display to a user over the modem.  ULP also determines at
  1426. startup whether an upload is a local upload, however this requires a drop file
  1427. as well.  By using the -L switch, you can force ULP to perform an online mode
  1428. test without a drop file:
  1429.  
  1430.     ULP -CULP.CFG -MUPLOAD -L -FD:\PATH\FILENAME.EXT
  1431.  
  1432. This mode can be used to plug ULP into another program as a single file
  1433. processor where a remote display is not required or appropriate.
  1434.  
  1435. RETAIN ORIGINAL ARCHIVE DATE (ULP):
  1436. ───────────────────────────────────
  1437. ULP normally stamps all uploads with the current date and time of processing.
  1438. If you wish to keep the original archive date, add the -R switch to the command
  1439. line:
  1440.  
  1441.     ULP -CULP.CFG -MBATCH -R
  1442.  
  1443. Note, that this doesn't affect the date inserted in the directory listing for
  1444. the upload; this affects only the file date stamp on disk.
  1445.  
  1446. NODE NUMBER (ULP):
  1447. ──────────────────
  1448. ULP normally gets the current node number from the door drop files, however
  1449. this can be overridden on the command line using the -N switch should the need
  1450. arise.  Normally this is used only for online testing modes, since the ULP
  1451. program manages node contention on its own to prevent node number duplication
  1452. and processing collisions.  An example of node number definition:
  1453.  
  1454.     ULP -CULP.CFG -MBATCH -N100
  1455.  
  1456. Use this switch only if you absolutely need to; under most circumstances it is
  1457. not required.  Note that node 0 is not an acceptable number.
  1458.  
  1459. DISABLE 16550 FIFO (ULP, DOS versions only):
  1460. ────────────────────────────────────────────
  1461. If your BBS is running on an oddball 16550-compatible serial port, such as
  1462. early Western Digital UARTs and Hayes ESPs, you may get better performance by
  1463. disabling the FIFO operation of ULP during online testing mode.  This is done
  1464. by adding the -1 switch to the command line in PCBTEST.BAT (online testing is
  1465. the only time where you might need to disable 16550 FIFOs):
  1466.  
  1467.     C:\ULP\ULP.EXE -CC:\ULP\ULP.CFG -F%1 -M%2 -D%3 -1
  1468.  
  1469. HANDSHAKE METHOD (ULP, DOS versions only):
  1470. ──────────────────────────────────────────
  1471. Serial I/O requires that the ports handshake in some fashion to know when to
  1472. start and stop data transfer; two methods are commonly used, either separate or
  1473. in combination.  The most common is hardware (also referred to as RTS/CTS) and
  1474. this is the ULP startup default.  The other method, which is used primarily for
  1475. compatibility with older equipment, is software (also known as XON/XOFF).  If
  1476. you need software or both types of handshaking in your system, you can specify
  1477. it on the command line:
  1478.  
  1479.     C:\ULP\ULP.EXE -CC:\ULP\ULP.CFG -F%1 -M%2 -D%3 -HSOFTWARE
  1480.     C:\ULP\ULP.EXE -CC:\ULP\ULP.CFG -F%1 -M%2 -D%3 -HBOTH
  1481.  
  1482.  
  1483. ┌───────────────┐
  1484. │  12. BBS Ads  │
  1485. └───────────────┘
  1486.  
  1487. The ULP system includes a BBS ad removal feature based on CRC-32 calculation of
  1488. the file contents and other pertinent data.  In this fashion, ULP can detect a
  1489. known ad file despite changes of the file name and date.
  1490.  
  1491. In order for sysops to be able to 'keep up' with new ads produced by the weenie
  1492. sysops who insert the @!&*#%$ things, ULPSM has two maintenance functions that
  1493. permit the sysop to update the BBS ads database with their own information.
  1494.  
  1495. First, ULPSM can scan a BBS ad file (or multiple files), and update the BBS ads
  1496. database with the required information.  Don't worry about duplication within
  1497. the database, as part of the compiling process is to purge duplicate BBS ad
  1498. data.  To add files to the BBS ads database, select menu G (BBS ad processing),
  1499. and select submenu B (Add new BBS ad to BBS ads database).  The online help
  1500. contains all information that may be necessary.
  1501.  
  1502. Second, since the latest version of my master BBS ads database is always
  1503. included in the distribution archive, you don't want to keep changing your
  1504. database from release to release.  Therefore, you can merge the new release
  1505. database with your existing BBS ads database via ULPSM as well.  To merge the
  1506. distribution database with your own database, select menu G (BBS ad
  1507. processing), and select submenu C (Merge pre-built BBS ad database).  Again,
  1508. the online help contains all information that may be necessary.
  1509.  
  1510. Note that ULPSM cannot (will not) put 0-byte bbs adds in its database; this is
  1511. because every 0-byte file has the same CRC-32: 0.  Therefore, inserting 0-byte
  1512. files into a numerical database is useless and doing so would remove *every*
  1513. 0-byte file encountered, not just the BBS ads, including subdirectory markers
  1514. in pathed archives.  The exclusion filter list is the best place for 0-byte
  1515. ads, since the only thing unique to 0-byte files is the filename.
  1516.  
  1517. I would greatly appreciate your passing along any new BBS ad files that you may
  1518. collect over time to me so I can update the master database that I include with
  1519. the ULP distribution archive.  Please refer to the top of this document for my
  1520. BBS number.
  1521.  
  1522.  
  1523. ┌─────────────────────────┐
  1524. │  13. The Future of ULP  │
  1525. └─────────────────────────┘
  1526.  
  1527. ULP will be supported as long as I'm in the BBSing business (which will be
  1528. quite a while...once it's in your blood, you can never shake it <grin>).  The
  1529. ULP system will be rapidly expanding it's features so it will be your first
  1530. choice in BBS upload processors.  Some current plans (in no particular order):
  1531.  
  1532.     ∙ Add the ability to preprocess files prior to file checking them;
  1533.       for example, decompress executables that have been PKLite'd.
  1534.     ∙ Better support for other BBS software directory list formats.
  1535.  
  1536. If you have any other suggestions, or want other archivers supported, please
  1537. contact me via Email, U.S. snail-mail or on my BBS at the number at the top of
  1538. this document.
  1539.  
  1540. Thanks for giving ULP a try!
  1541.  
  1542.  
  1543. ┌────────────────────────────────┐
  1544. │  Appendix A:  DOS Errorlevels  │
  1545. └────────────────────────────────┘
  1546.  
  1547. The following is a partial list of errorlevels returned to the operating
  1548. system by the ULP and ULPSM programs.  Not all errorlevels are documented,
  1549. since the error messages are much more useful in debugging problems.
  1550.  
  1551.     0       Successful execution (ULP and ULPSM)
  1552.     1       Successful execution, nothing to do (ULP event modes)
  1553.     1       Unknown archive format (ULP online modes)
  1554.     2       DOS reserved keyword found in archive (ULP online modes)
  1555.     3       Error unpacking archive (archive integrity) (ULP online modes)
  1556.     4       Error file checking archive files (virus, etc.) (ULP online modes)
  1557.     5       Error duplicate checking archive files (ULP online modes)
  1558.     6       Error packing archive (ULP online modes)
  1559.     7       Age limit exceeded by archive files (ULP online modes)
  1560.     8       Encrypted file found in archive files (ULP online modes)
  1561.     9       TCANned file (ULP online modes)
  1562.     10      Bad GIF file (ULP online modes)
  1563.     11      Unacceptable GIF or JPEG resolution (ULP online modes)
  1564.     12      GIF compressed with GIFLITE (ULP online modes)
  1565.     13      Unable to create work space (ULP online modes)
  1566.     14      Empty archive detected (ULP online modes)
  1567.     99      Help screen (executing a program with no or an insufficient number
  1568.             of arguments)  (ULP and ULPSM)
  1569.     >99     Program error (refer to the error message and log file).
  1570.  
  1571.  
  1572. ┌────────────────────────────────┐
  1573. │  Appendix B:  Acknowlegements  │
  1574. └────────────────────────────────┘
  1575.  
  1576. The DOS versions of ULP and ULPSM use the SPAWNO swapping routines by Ralf
  1577. Brown to minimize memory use while shelling to DOS and running external
  1578. programs.
  1579.  
  1580. The Graphics Interchange Format(c) is the Copyright property of CompuServe
  1581. Incorporated.  GIF(sm) is a Service Mark property of CompuServe Incorporated.
  1582. (Standard verbage required by CompuServe)
  1583.  
  1584. The problem of automatically recognizing duplicate files on large bulletin
  1585. board systems, independent of filename, was originally solved by Dr. Frederick
  1586. W. Kantor (founder of Information Mechanics and author of FWKCS(TM)
  1587. Contents_Signature System), who came up with the elegant solution of using both
  1588. the 32_bit CRC and the uncompressed file length together to make a
  1589. "contents_signature" for each file. Dr. Kantor's experimental data has shown a
  1590. typical pairwise error rate of less than one part in ten trillion using this
  1591. technology.
  1592.  
  1593.  
  1594. ┌─────────────────────────────────────┐
  1595. │  Appendix C:  Command Line Summary  │
  1596. └─────────────────────────────────────┘
  1597.  
  1598. ULP.EXE command-line syntax:
  1599.  
  1600. ULP -Cd:\path\config.ext -Mmode [-Fd:\path\<file.ext>] [-Dd:\path\desc.ext]
  1601.    [-P#<,#>] [-B#] [-H?] [-1] [-X] [-O] [-L] [-N#] [-G?] [-R] [-T#] [-Q] [-!]
  1602.  
  1603.     -C  filename of the ULP configuration file
  1604.     -M  processing mode [Batch/Override/Retest/Convert/Upload/Test/Attach]
  1605.     -F  filename/subdirectory of the archive(s) to be tested  (conditional)
  1606.     -D  filename of the upload description file  (optional)
  1607.     COM port switches:  (optional)
  1608.     -P  COM port number [0-2/addr,irq]  -L  force local mode
  1609.     -B  DTE baud rate [300-115200]      -H  handshake [Hardware/Software/Both]
  1610.     -1  disable 16550 FIFO operation    -X  use FOSSIL driver interface
  1611.     -O  use OS/2 SIO API interface
  1612.     Miscellaneous switches:  (optional)
  1613.     -N  BBS node number                 -G  ANSI graphics toggle [Yes/No]
  1614.     -R  retain original archive date    -T  readability time delay [0-10]
  1615.     -Q  quiets beep on error            -!  enables debugging operation
  1616.  
  1617. ULPSM.EXE command-line syntax:
  1618.  
  1619.     ULPSM -Cd:\path\config.cfg [-Ad:\path\<file.ext>] [-U] [-R] [-S] [-P#] [-I]
  1620.         [-T#] [-Q]
  1621.  
  1622.     -C  complete path and filename of the configuration file
  1623.     -A  file(s) to add to the duplication database  (optional)
  1624.     -U  forces unpacking of all archives when adding files  (optional)
  1625.     -R  recurses nested drive subdirectories when adding files  (optional)
  1626.     -S  compiles, sorts and indexes the duplication database  (optional)
  1627.     -P  age in months for purging duplication database records  (optional)
  1628.     -I  initialize process data file  (optional)
  1629.     -T  sets time delay for display readability  (optional)
  1630.     -Q  quiets beep when an error is detected  (optional)
  1631.